#ifndef _INC_ITERATOR_T_H_
#define _INC_ITERATOR_T_H_

template<class T>
class Iterator_t
{
public:
	/**
	* Ctor
	*/
	Iterator_t();

	/**
	* Dtor
	*/
	virtual ~Iterator_t();

	/**
	* Returns current element data
	*/
	virtual T* get() const = 0;

	/**
	* Returns true whether iterator has more elements to traverse
	*/
	virtual bool hasNext() const = 0;

	/**
	* Moves iterator to the next element in container
	*/
	virtual void next() = 0;

private:
	/**
	* Copy Ctor
	*/
	Iterator_t(const Iterator_t& other);

	/**
	* Assignment operator
	*/
	Iterator_t& operator=(const Iterator_t& other);
};

#include "Iterator_t.hpp"

#endif // _INC_ITERATOR_T_H_